Curso: 3º MAIS
El presente trabajo tiene como objetivo profundizar en el estudio de la primera serie de los Episodios Nacionales de Benito Pérez Galdós, una colección de novelas que relatan eventos clave de la historia de España entre 1805 y 1812, combinando de manera única la ficción con hechos históricos significativos.
Las novelas de esta serie son:
Galdós, uno de los escritores más importantes de la literatura española del siglo XIX, utilizó estas obras para ofrecer una perspectiva crítica y detallada de la sociedad española de su tiempo, utilizando un enfoque que integra la historia con la ficción para explorar la condición humana y los cambios sociales.
Objetivos del Trabajo:
Análisis Textual Profundo de las Novelas de Galdós: Este trabajo se centrará en un análisis de los textos utilizando técnicas avanzadas de minería de textos. A través de herramientas como Quanteda y TidyText, se explorarán temas recurrentes, la frecuencia de palabras y la evolución del tono y estilo en las novelas. Las técnicas utilizadas incluyen:
Frecuencia de palabras representada en nubes de palabras (wordclouds) para visualizar las palabras más comunes.
Gráfico del número de líneas por capítulo a lo largo de los libros.
Análisis TF-IDF para evaluar la importancia de palabras clave por cada libro.
Ley de Zipf para examinar la distribución de la frecuencia de las palabras.
Modelado de temas (Topic Modeling) para identificar y extraer los principales tópicos abordados en las obras.
Análisis de sentimiento para evaluar las emociones expresadas en los textos.
Análisis de Redes Sociales (SNA): Crearemos una red social de personajes para analizar las relaciones y conexiones entre ellos en las novelas de Galdós. Esto ayudará a entender mejor la dinámica social y las interacciones entre los personajes.
Este análisis no solo pretende enriquecer la comprensión académica de las obras de Galdós, sino también proporcionar una metodología replicable para estudios literarios que combinen técnicas cuantitativas y cualitativas, fomentando un diálogo interdisciplinario entre la literatura y la ciencia de datos.
# Paquetes para manipulación y análisis de datos
library(dplyr) # Manipulación de datos
library(tidyverse) # Colección de paquetes para ciencia de datos
library(tidyr) # Herramientas para "tidy data" (datos ordenados)
library(stringr) # Manipulación de cadenas de caracteres
library(forcats) # Herramientas para trabajar con factores
# Paquetes específicos para análisis de texto
library(quanteda) # Análisis cuantitativo de texto
library(quanteda.textplots) # Visualización de resultados de análisis de texto
library(tidytext) # Procesamiento y análisis de texto ordenado
library(gutenbergr) # Descarga de textos del Proyecto Gutenberg
library(wordcloud) # Generación de nubes de palabras
library(textstem) # Lematización y stemming de texto
library(syuzhet) # Análisis de sentimientos y extracción de rasgos de narrativa
# Paquetes para visualización
library(ggplot2) # Creación de gráficos
library(hrbrthemes) # Temas y personalización de gráficos con ggplot2
library(gganimate) # Animación de gráficos creados con ggplot2
library(magick) # Manipulación y procesamiento de imágenes
library(showtext) # Uso de fuentes personalizadas en gráficos
library(ggtext) # Añadir y personalizar texto en gráficos ggplot2
library(gridExtra) # Disposición de múltiples gráficos en una sola página
# Paquetes para modelado y análisis avanzado
library(topicmodels) # Modelos de temas para análisis de texto
library(igraph) # Análisis y visualización de grafos
Se configura una semilla para la reproducibilidad de los gráficos.
set.seed(200)
Los libros de la primera serie de los Episodios Nacionales se obtuvieron a través del Proyecto Gutenberg, una biblioteca digital gratuita con una amplia colección de obras clásicas.
# IDs de Gutenberg de la primera serie de Episodios Nacionales
galdos_books <- c(16961, 67155, 67189, 14311, 67360, 49433, 67415, 21906, 67705, 67817)
book_titles <- c("Trafalgar",
"La corte de Carlos IV",
"El 19 de marzo y el 2 de mayo",
"Bailén",
"Napoleón en Chamartín",
"Zaragoza",
"Gerona",
"Cádiz",
"Juan Martín el Empecinado",
"La batalla de los Arapiles")
# Descargar los textos
books_data <- lapply(galdos_books, gutenberg_download, meta_fields = "title")
## Determining mirror for Project Gutenberg from https://www.gutenberg.org/robot/harvest
## Using mirror http://aleph.gutenberg.org
# Asegurarse de asignar nombres a cada elemento de la lista según el título del libro
names(books_data) <- book_titles
# Función para corregir la codificación de un texto específico
correct_encoding <- function(text) {
iconv(text, from = "ISO-8859-1", to = "UTF-8")
}
# Lista de títulos de libros que requieren corrección de codificación
books_needing_correction <- c("Trafalgar", "Bailén", "Cádiz")
# Aplicar la corrección de codificación solo a los libros seleccionados
for (i in seq_along(books_data)) {
if (names(books_data)[i] %in% books_needing_correction) {
# Corregir la codificación del texto de los libros específicos
books_data[[i]]$text <- sapply(books_data[[i]]$text, correct_encoding, USE.NAMES = FALSE)
}
}
# Verificar que los nombres siguen siendo correctos después de la corrección
print(names(books_data))
## [1] "Trafalgar" "La corte de Carlos IV"
## [3] "El 19 de marzo y el 2 de mayo" "Bailén"
## [5] "Napoleón en Chamartín" "Zaragoza"
## [7] "Gerona" "Cádiz"
## [9] "Juan Martín el Empecinado" "La batalla de los Arapiles"
# Función para procesar cada libro
process_book <- function(book_data, title) {
lines <- unlist(strsplit(book_data$text, "\n", fixed = TRUE))
lines <- lines[lines != ""] # Eliminar líneas vacías
# Ampliando la expresión regular para capturar números romanos más grandes
roman_regex <- "^-?(I|II|III|IV|V|VI|VII|VIII|IX|X|XI|XII|XIII|XIV|XV|XVI|XVII|XVIII|XIX|XX|XXI|XXII|XXIII|XXIV|XXV|XXVI|XXVII|XXVIII|XXIX|XXX|XXXI|XXXII|XXXIII|XXXIV|XXXV|XXXVI|XXXVII|XXXVIII|XXXIX|XL|XLI|XLII|XLIII|XLIV|XLV|XLVI|XLVII|XLVIII|XLIX|L|LI|LII|LIII|LIV|LV|LVI|LVII|LVIII|LIX|LX|LXI|LXII|LXIII|LXIV|LXV|LXVI|LXVII|LXVIII|LXIX|LXX)-?$"
book_df <- data.frame(
text = lines,
book = rep(title, length(lines)),
line_number = seq_along(lines),
chapter = cumsum(grepl(roman_regex, lines, ignore.case = TRUE)),
stringsAsFactors = FALSE
)
return(book_df)
}
# Aplicar la función a cada libro y combinar en un solo dataframe
books_metadata <- lapply(seq_along(books_data), function(i) {
process_book(books_data[[i]], names(books_data)[i])
}) %>% bind_rows()
Comprobamos su estructura.
# Comprobar la estructura
summary(books_metadata)
## text book line_number chapter
## Length:64574 Length:64574 Min. : 1 Min. : 0.00
## Class :character Class :character 1st Qu.:1615 1st Qu.: 8.00
## Mode :character Mode :character Median :3229 Median :15.00
## Mean :3314 Mean :16.15
## 3rd Qu.:4861 3rd Qu.:24.00
## Max. :8768 Max. :43.00
# Ver algunos de los datos
head(books_metadata)
tail(books_metadata)
Como podemos observar, todos aquellos textos que preceden al primer capítulo, tales como prólogos, son asignados el capítulo 0. Por lo que, para llevar a cabo un análisis riguroso sobre la obra galdosiana, vamos a omitir estos fragmentos, junto con el título de cada capítulo de enumeración romana.
# Filtrar los textos que no son parte de los capítulos (chapter == 0)
# y eliminar líneas que son títulos de capítulos
books_metadata_filtered <- books_metadata %>%
filter(chapter > 0) %>% # Excluir textos antes del primer capítulo
filter(!grepl(roman_regex, text)) # Excluir títulos de capítulos
# Ver algunos de los datos filtrados
head(books_metadata_filtered)
Se ha observado que en la edición de Bailén descargada, existe un último fragmento en el que se presentan más libros publicados por la misma editorial. Por tanto, vamos a eliminarlo de nuestros datos de estudio, para centrarnos únicamente en la obra de Galdós.
# Identificar la línea donde comienza "TRADUCCIONES DE DIVERSAS OBRAS"
start_line <- which(books_metadata_filtered$book == "Bailén" & grepl("TRADUCCIONES DE DIVERSAS OBRAS", books_metadata_filtered$text))
# Filtrar el dataframe para excluir todas las líneas desde start_line en adelante para el libro "Bailén"
if (length(start_line) > 0) {
start_line_value <- books_metadata_filtered$line_number[start_line]
books_metadata_filtered <- books_metadata_filtered[!(books_metadata_filtered$book == "Bailén" & books_metadata_filtered$line_number >= start_line_value), ]
}
Los wordclouds o nubes de palabras son excelentes recursos visuales para la visualización de la frecuencia de palabras en textos. Vamos a elaborar uno para todos los libros de estudio.
# Crear el corpus a partir del texto filtrado
corpus_books <- corpus(books_metadata_filtered$text,
docvars = data.frame(book = books_metadata_filtered$book,
line_number = books_metadata_filtered$line_number,
chapter = books_metadata_filtered$chapter))
# Revisión del corpus
summary(corpus_books)
Limpieza de caracteres especiales.
# Función para eliminar guiones no deseados y limpiar texto
clean_text <- function(text) {
text <- gsub("\\s--", " ", text) # Eliminar espacios seguidos de dos guiones
gsub("^--", "", text) # Eliminar dos guiones al inicio
}
# Aplicar limpieza al texto del corpus y crear un nuevo corpus con texto limpio
texts_cleaned <- sapply(as.character(corpus_books), clean_text)
corpus_books <- corpus(texts_cleaned)
# Convertir el corpus en tokens y aplicar limpieza inicial
tokens_books <- quanteda::tokens(corpus_books, what = "word",
remove_numbers = TRUE, remove_punct = TRUE,
remove_symbols = TRUE, remove_separators = TRUE,
split_hyphens = TRUE)
# Aplicar una limpieza adicional para eliminar guiones y palabras vacías
tokens_books <- tokens_replace(tokens_books, pattern = c("^--$", "^-$", "^$"), replacement = c("", "", ""))
tokens_books <- tokens_remove(tokens_books, stopwords("es"))
tokens_books <- tokens_remove(tokens_books, c("--", "tal", "dijo", "dije", "pues", "--dije", "--dijo", "me", "--pregunté", "mismo", "tan", "puedo", "puede", "dije--", "si", "á", "va", "sé"))
# Generamos una matriz de términos-documento para analizar la frecuencia de los tokens limpios en el dataset.
dfm_books <- dfm(tokens_books)
# Obtenemos las 100 palabras más frecuentes en el corpus para identificar los términos dominantes.
top_terms <- topfeatures(dfm_books, 100)
print(top_terms)
## usted d casa después aquí dos aquel bien
## 1788 1642 1313 1175 1169 1031 1006 979
## gran dios señora franceses hombre ser aquella así
## 945 922 841 807 797 784 780 776
## allí ahora inés ver señor sr ojos vez
## 735 724 714 708 704 660 655 646
## tiempo día aunque fin parece cómo toda mano
## 632 625 606 600 593 585 574 570
## calle noche sino hacia todas doña decir gente
## 569 557 553 547 547 542 535 526
## vida modo menos dicho hacer luego parte general
## 520 514 505 502 501 501 499 497
## mil padre manos mundo hombres hecho entonces alma
## 477 476 472 460 456 453 451 451
## cosa siempre amigo solo voz alguna españa exclamó
## 439 438 435 434 427 425 412 412
## punto mal tres hija puerta juan quiero días
## 407 406 403 396 387 387 385 382
## pronto buen mañana verdad cabeza vi persona tierra
## 380 379 374 373 372 371 366 365
## lado cuerpo visto momento maría hace madrid decía
## 358 357 356 356 354 354 353 350
## fuego mejor san parecía corazón allá aquellos guerra
## 349 349 346 344 342 342 341 338
## gabriel quién condesa cosas
## 336 336 336 330
Un aspecto llamativo observado entre las palabras obtenidas es la presencia recurrente de una «d» solitaria. Esto no es casualidad, ya que en los textos ambientados en la España del siglo XIX, era común el uso de formas de cortesía. Por lo tanto, esa letra es una abreviación de «Don».
A continuación, se combinarán palabras para formar bigramas, trigramas y cuatrigramas con el fin de evaluar más detalladamente los temas y conceptos más frecuentes a lo largo de los textos. Con el contenido obtenido, se creará una wordcloud.
# Creamos tokens de n-gramas, incluyendo bigramas, trigramas y cuatrigramas,
# para identificar frases comunes y asociaciones frecuentes.
tokens_grams <- tokens_ngrams(tokens_books, n = 2:4)
# Convertimos los tokens de n-gramas en una matriz de términos-documento para facilitar el análisis.
dfm_grams <- dfm(tokens_grams)
# Extraemos las 200 palabras o combinaciones de palabras más frecuentes para análisis posterior.
topfeatures(dfm_grams, 200)
## lord_gray sr_d d_diego doña_maría
## 266 229 178 162
## mosén_antón d_juan juan_martín miss_fly
## 148 142 132 127
## juan_dios d_pedro d_josé d_paco
## 114 106 101 99
## doña_flora d_celestino d_pablo señora_condesa
## 93 92 91 89
## d_mauro d_juan_martín señora_doña gran_capitán
## 82 75 68 67
## toda_prisa aquel_día jean_jean día_siguiente
## 64 61 61 59
## d_roque príncipe_paz dos_tres sr_araceli
## 56 55 55 51
## todas_partes d_mariano sabe_usted algún_tiempo
## 50 50 49 47
## doña_restituta d_alonso doña_francisca bien_pronto
## 47 45 45 45
## habló_así señora_sumta d_gabriel alguna_vez
## 45 45 44 42
## d_saturnino aquel_hombre mil_veces cada_vez
## 42 41 41 41
## alguna_cosa mejor_dicho d_luis aquella_noche
## 40 40 40 39
## señor_d aquel_momento d_carlos fernando_vii
## 39 39 39 39
## mucha_gente sr_santorcaz mayor_parte quiere_usted
## 38 37 36 36
## mil_hombres primera_vez _santa_ana_ largo_rato
## 36 36 36 36
## toda_vida d_vicente cosa_alguna señor_marqués
## 35 35 34 33
## cuartel_general josé_montoria varias_veces ninguna_parte
## 33 33 32 32
## usted_sr tres_días voz_baja d.ª_maría
## 32 32 32 32
## aquella_casa cada_instante sr_d_gabriel d_josé_montoria
## 31 31 31 31
## ver_cómo quiero_decir don_diego padre_salmón
## 30 30 30 30
## d_santiago doña_gregoria san_francisco tío_candiola
## 30 30 30 30
## gracias_dios hace_tiempo san_josé señor_oficial
## 29 29 29 29
## señora_madre rey_josé san_juan gran_parte
## 29 28 27 27
## después_haber ven_acá largo_tiempo señora_doña_maría
## 27 27 27 27
## campo_batalla aquella_ocasión dos_días repetidas_veces
## 27 26 26 26
## aquel_tiempo aquellos_días mano_derecha señor_duque
## 25 25 25 25
## vamos_ver ve_usted virgen_pilar sr_nomdedeu
## 25 25 25 25
## sr_d_pablo exclamó_d aquel_instante veinte_años
## 25 24 24 24
## lord_wellington josé_maría d_francisco general_jefe
## 24 23 23 23
## vicente_sardina debía_ser podía_ser d_josé_maría
## 23 22 22 22
## aquí_allí pedazo_pan gran_número debe_ser
## 22 22 22 22
## capitán_general licenciado_lobo pablo_nomdedeu todas_horas
## 22 22 22 21
## aquel_sitio aquella_gente quién_sabe toda_noche
## 21 21 21 21
## sr_mañara señora_respondí mauro_requejo señor_araceli
## 21 21 21 21
## mariano_álvarez oí_decir dos_horas carlos_españa
## 21 20 20 20
## arapil_grande alguna_parte pude_menos cuarto_hora
## 20 19 19 19
## dos_personas s_m señora_marquesa príncipe_asturias
## 19 19 19 19
## doña_ambrosia don_juan señor_cura san_pedro
## 19 19 19 19
## sra_condesa sr_d_pedro muchas_cosas vaya_usted
## 19 19 18 18
## cree_usted amigo_d pocos_días casa_calle
## 18 18 18 18
## todas_noches voz_alta camino_real sr_juan
## 18 18 18 18
## puerta_sol tío_mano san_agustín d_jerónimo
## 18 18 18 18
## d_vicente_sardina ciudad_rodrigo santa_maría entrar_casa
## 18 18 17 17
## san_vicente quiero_ver usted_aquí dice_usted
## 17 17 17 17
## d_antonio doña_juana señor_conde sabe_dios
## 17 17 17 17
## hace_dos san_felipe sr_d_diego d_pablo_nomdedeu
## 17 17 17 17
## d_mariano_álvarez plaza_san gran_bretaña según_dicen
## 17 16 16 16
## muchas_veces dar_paso hacer_caso dos_años
## 16 16 16 16
## hacia_atrás señor_licenciado vamos_allá calle_ancha
## 16 16 16 16
## niño_jesús padre_castillo carta_seguridad pedro_congosto
## 16 16 16 16
# Nombre del archivo
filename <- "src/graphics/00_wordcloud_primera_serie.png"
# Configuración para guardar el gráfico
png(filename,
width=3000,
height=3000,
bg = "black"
)
# Generar el wordcloud
textplot_wordcloud(dfm_grams,
min_count = 10,
random_order = FALSE,
rotation = 0,
color = brewer.pal(8, "Set3"))
# Cerrar el dispositivo de gráficos
dev.off()
El wordcloud generado a partir de la primera serie de los Episodios Nacionales y el análisis de términos frecuentes revelan aspectos cruciales sobre los temas y personajes centrales de la serie:
Prominencia de Personajes: Nombres como «Lord Gray», «Doña María», «Juan Martín» y «Mosén Antón» indican personajes recurrentes y centrales. Estos personajes probablemente juegan roles clave en el desarrollo de la trama y en la representación de las diversas facciones sociales y políticas de la época.
Importancia de los Diálogos: Las frecuentes apariciones de palabras como «dijo», «preguntó», y «respondió» reflejan un estilo narrativo que se basa mucho en diálogos. Esto sugiere que las conversaciones entre personajes son un vehículo principal para el avance de la trama y la exposición de ideas.
Elementos de Interacción Social y Política: La presencia de términos como «Sr.», «Don», «Doña», y otros títulos denotan un fuerte enfoque en las clases sociales y la estructura de poder. Además, las interacciones entre estos personajes podrían reflejar las dinámicas sociales y políticas de la España del siglo XIX.
Contexto Histórico y Militar: Palabras como «capitán», «general», y «batalla» sugieren que las novelas tienen un fuerte componente histórico y militar, probablemente reflejando los conflictos bélicos de la época, como la Guerra de Independencia Española.
Dimensiones Emocionales y Humanas: Frases como «mismo tiempo», «alguna vez», «puede ser», y «misma noche» indican una exploración de las emociones y pensamientos internos de los personajes, proporcionando profundidad psicológica y temporal a la narración.
Uso de Localizaciones y Tiempo: La mención de lugares y tiempos específicos («aquel día», «cada vez», «largo tiempo») ayuda a establecer el escenario y avanza la ambientación de las historias.
Este análisis sugiere que Galdós utiliza sus Episodios Nacionales no solo para contar historias de individuos particulares sino para ofrecer una visión panorámica y crítica de la sociedad española en momentos de crisis y cambio. La frecuencia y la prominencia de ciertos nombres y temas en la nube de palabras proporcionan una ventana a las prioridades narrativas y temáticas del autor, ofreciendo una herramienta útil para entender cómo se entretejen personajes y eventos históricos en el lienzo más amplio de la historia española narrada por Galdós.
En este apartado, se realiza un análisis exploratorio de datos para comprender la distribución del número de líneas en cada capítulo de los libros de estudio. Este análisis permite identificar patrones en la estructura de los textos y proporciona una visión general de cómo están organizados los capítulos en términos de longitud. Para ello, se utiliza una visualización gráfica que muestra la cantidad de líneas por capítulo en cada libro, facilitando la identificación de variaciones y tendencias a lo largo de la obra.
# Ordenar los datos según el orden de la primera serie en el array book_titles
books_metadata_filtered$book <- factor(books_metadata_filtered$book, levels = book_titles)
# Crear un gráfico de barras para visualizar la distribución de los capítulos por libro
plot <- ggplot(books_metadata_filtered,
aes(x = as.factor(chapter), fill = book)) + # Convertir la variable 'chapter' a factor para una mejor visualización
geom_bar(show.legend = FALSE) + # Crear un diagrama de barras sin leyenda
labs(x = "Capítulo",
y = "Número de Líneas",
title = "Distribución del Número de Líneas por Capítulo y Libro",
subtitle = plot_subtitle,
caption = plot_caption,
fill = "Libro") +
facet_wrap(~book, ncol = 1, scales = "free_y")
# Guardar el gráfico como un archivo PNG
png("src/graphics/01_num_lineas_capitulo.png", height = 20, width = 10, units = "in", res = 150)
print(plot)
dev.off()
El gráfico que se presenta muestra la distribución del número de líneas por capítulo en cada uno de los libros de la primera serie de los Episodios Nacionales de Benito Pérez Galdós. Como se puede observar, existe una gran variabilidad en la extensión de los capítulos, que oscila entre las 100 y las 400 líneas.
Brevedad de la primera obra de la serie
La primera obra de la serie, Trafalgar, es la que presenta los capítulos más breves, con una media de 200 líneas. Esta brevedad se puede explicar por varios motivos:
Inmadurez del autor: En el momento en que Galdós escribió Trafalgar, se encontraba en las etapas iniciales de su trayectoria literaria. Aún no había desarrollado completamente su estilo narrativo distintivo ni empleaba técnicas literarias avanzadas.
Publicación por entregas: Trafalgar fue publicado en formato de folletín, lo que requería que Galdós mantuviera una tensión constante en la narrativa y limitara la longitud de los capítulos para mantener el interés del lector.
Enfoque temático: La trama de Trafalgar se enfoca en la conocida batalla naval homónima. La sencillez de este tema permite una exploración directa sin necesidad de un desarrollo profundo.
Gran extensión de la última obra de la serie
La longitud de La batalla de los Arapiles se atribuye a varios factores:
Punto culminante de su carrera: Redactada en 1875, esta obra señala un período de madurez en la carrera de Galdós, donde domina plenamente su estilo narrativo y las técnicas literarias.
Libertad en la narrativa: Aunque La batalla de los Arapiles es la última obra de la primera serie, Galdós no enfrentó la presión de concluir toda la serie de manera apresurada y satisfactoria para el público, lo que le permitió explorar la narrativa con mayor profundidad.
Temática detallada: Este libro aborda uno de los episodios clave de la Guerra de la Independencia Española. Galdós explora con profundidad las dimensiones políticas, militares y sociales de este evento.
Diversidad de personajes: La novela introduce una variedad de personajes, tanto históricos como ficticios, dedicando tiempo significativo a desarrollar cada uno y sus interacciones.
Recreación de la batalla: La descripción de la batalla es meticulosa y utiliza diversas técnicas narrativas para captar el caos y la intensidad del combate.
Conclusiones sobre la variabilidad en la serie
El análisis del número de líneas por capítulo en la primera serie de Episodios Nacionales muestra una notable variabilidad en la longitud de los capítulos. Esto se explica por factores como la madurez del autor, la libertad creativa, la complejidad de los temas, la cantidad de personajes y la profundidad de la trama.
La batalla de los Arapiles, destacando por su temática compleja y madurez narrativa, es la obra más extensa de la serie. Por contraste, Trafalgar, escrita en las primeras etapas de la carrera de Galdós y con una trama más simple, resulta ser la más breve.
Consideraciones adicionales
Además de los elementos analizados, es crucial considerar que la longitud de las obras literarias también puede influirse por la complejidad de la trama, la profundidad en la caracterización de los personajes y la riqueza en las descripciones ambientales. En el caso de Episodios Nacionales, como serie de novelas históricas, Galdós incorporó una considerable cantidad de información factual, lo cual también pudo contribuir al aumento en la extensión de las obras.
El estadístico TF-IDF (frecuencia de término - frecuencia inversa de documento) está diseñado para medir la importancia de una palabra en un documento dentro de una colección (o corpus) de documentos. Esta medida tiene en cuenta dos aspectos importantes:
Frecuencia de término (TF): Esto evalúa qué tan frecuentemente aparece una palabra específica en un documento en comparación con el total de palabras en ese documento. Cuanto más frecuente sea una palabra en un documento, mayor será su puntaje de TF para ese documento.
Frecuencia inversa de documento (IDF): Este aspecto considera qué tan común es una palabra en todos los documentos de la colección. Si una palabra es muy común en todos los documentos, su puntaje de IDF será bajo. Por otro lado, si una palabra es poco común y aparece solo en unos pocos documentos, su puntaje de idf será alto.
En este caso, los documentos son los libros de la primera serie de Episodios Nacionales.
# Convertir los tokens en un dataframe para cálculo de TF-IDF
words_df <- tokens_books %>%
unlist(use.names = FALSE) %>%
enframe(name = NULL, value = "word") %>%
mutate(document = rep(books_metadata_filtered$book, times = lengths(tokens_books))) # Asegura la correspondencia directa durante la creación del dataframe
# Continuar con el filtrado para limpieza
words_df <- words_df %>%
filter(str_detect(word, "^[a-zA-ZáéíóúÁÉÍÓÚñÑüÜ]+$")) %>% # Solo caracteres alfabéticos
filter(nchar(word) > 1) %>% # Excluir palabras de un solo carácter
filter(!word %in% c("ví", "fué", "dió", "tí", "dijo", "fue", "dio", "hizo", "tuvo", "vino", "dio", "vió", "pudo", "quedó", "salió", "sólo", "ésta")) # Excluir verbos comunes y otras palabras no significativas
# Calcular frecuencias de término
word_counts <- words_df %>%
count(document, word, sort = TRUE)
# Unir con el total de palabras por documento para el cálculo de TF-IDF
total_words <- word_counts %>%
group_by(document) %>%
summarize(total = sum(n))
# Calcular TF-IDF
tf_idf <- word_counts %>%
bind_tf_idf(word, document, n) %>%
arrange(desc(tf_idf))
# Suponiendo que 'n' es el conteo de términos y que necesitamos calcular el total de términos por documento
total_words_per_document <- tf_idf %>%
group_by(document) %>%
summarize(total = sum(n))
# Añadir esta información de nuevo a tf_idf para calcular frecuencias relativas
tf_idf <- tf_idf %>%
left_join(total_words_per_document, by = "document")
# Mostrar las palabras con mayor TF-IDF
head(tf_idf, 200)
# Filtrar para mostrar solo las 15 palabras más relevantes por libro
top_tf_idf_terms <- tf_idf %>%
group_by(document) %>%
slice_max(tf_idf, n = 15, with_ties = FALSE) %>%
ungroup()
# Crear un gráfico de barras horizontal ajustado para la visualización
plot <- ggplot(top_tf_idf_terms, aes(x = tf_idf, y = fct_reorder(word, tf_idf), fill = document)) +
geom_col(show.legend = FALSE) +
facet_wrap(~ document, ncol = 2, scales = "free_y") + # Ajuste para dos columnas, escalas libres
labs(x = "TF-IDF",
y = NULL,
title = "Palabras Clave por Libro según TF-IDF",
subtitle = "Análisis sobre los Episodios Nacionales: Primera Serie de Galdós",
caption = plot_caption)
# Guardar el gráfico
png("src/graphics/03_tfidf_palabras.png", width = 8, height = 20, units = "in", res = 150)
print(plot)
dev.off()
El gráfico Palabras clave por libro según TF-IDF obtenido de la primera serie de los Episodios Nacionales de Benito Pérez Galdós ofrece una vista detallada sobre los términos más distintivos de cada libro, proporcionando un reflejo de los temas y personajes que dominan cada volumen. Este análisis revela varias observaciones significativas sobre la serie:
Prominencia de Personajes: La mayoría de los términos destacados son nombres propios, lo que indica una fuerte presencia de personajes definidos en la narrativa de Galdós. Por ejemplo, «Marcial», «Francisca» y «Churruca» en Trafalgar son claves en la trama que gira en torno a la famosa batalla naval.
Ubicaciones y Contexto Histórico: En varios libros, aparecen nombres de lugares y eventos históricos, como «Gerona», «Zaragoza», y «La batalla de los Arapiles». Esto subraya el enfoque histórico de Galdós y su esfuerzo por anclar la ficción en contextos históricos reales y significativos.
Interacciones y Relaciones: La presencia de nombres en asociación con otros nombres (como «Lord Gray» y «Doña Asunción» en «Cádiz») puede sugerir relaciones y dinámicas entre personajes, que son fundamentales para la trama de los libros.
Diversidad Temática: Cada libro muestra un conjunto único de términos clave, lo que refleja la diversidad de temas y enfoques narrativos de Galdós en la serie. Por ejemplo, El 19 de marzo y el 2 de mayo se centra en personajes y temas específicos del levantamiento contra Napoleón, lo cual es distinto de los temas navales en Trafalgar.
Evolución de Personajes y Lugares: El cambio en las palabras clave de un libro a otro también podría indicar la evolución de los personajes o el cambio de ubicaciones y temas centrales, lo cual es crucial para entender el desarrollo de la serie en su conjunto.
Campos Semánticos Relacionados: Los términos clave identificados mediante el análisis TF-IDF tienden a seguir un campo semántico coherente con el contenido del libro. Por ejemplo, en Trafalgar, se destacan términos relacionados con la marina como «bordo», «navío», «marineros», y «tripulación», subrayando los temas marítimos y bélicos presentes en este volumen.
Este análisis TF-IDF no solo revela las palabras que son distintivas en cada texto, sino que también ayuda a comprender qué elementos son considerados centrales por el autor en cada parte de la serie. Observar cómo ciertos nombres aparecen en múltiples libros puede indicar personajes o temas recurrentes, mientras que la introducción de nuevos términos en libros posteriores puede reflejar la introducción de nuevos personajes o cambios en la dirección de la narrativa. Estos detalles son cruciales para estudios literarios más profundos que buscan explorar la estructura narrativa y el desarrollo temático en la obra de Galdós.
La ley de Zipf es un principio estadístico que destaca la regularidad en el uso de palabras dentro de un idioma. Esta ley predice que la frecuencia con la que una palabra aparece en un texto (o un conjunto de textos) es inversamente proporcional a su posición en la lista de frecuencia de palabras. En otras palabras, la palabra más común en un texto se usará aproximadamente el doble de veces que la segunda más común, tres veces más que la tercera más común, y así sucesivamente.
Este fenómeno se puede observar al trazar la frecuencia de las palabras frente a su rango de frecuencia; el resultado típicamente muestra una distribución hiperbólica. La ley lleva el nombre del lingüista George Zipf, quien fue uno de los primeros en describir este comportamiento.
A continuación, calculamos la frecuencia de términos por libro y les asignamos un rango basado en esta frecuencia:
# Asignar el rango y la frecuencia de término por documento
freq_by_rank_books <- tf_idf %>%
group_by(document) %>%
mutate(rank = row_number(),
term_frequency = n/total) %>%
ungroup()
freq_by_rank_books
Al graficar el rango de cada término contra su frecuencia relativa, esperamos ver una relación aproximadamente lineal en una escala logarítmica, si es que los datos siguen la ley de Zipf.
# Visualización de la ley de Zipf para cada libro
plot <- ggplot(freq_by_rank_books, aes(x = rank, y = term_frequency, color = document)) +
geom_line(linewidth = 1.1,
alpha = 0.6) + # Reducir la opacidad de las líneas originales para menos distracción
geom_smooth(method = "loess", # Método de suavizado local
span = 0.2, # El tamaño del "ventanal" para suavizar
se = FALSE, # No incluir la banda de error estándar
color = "black") + # Color de la línea suavizada
scale_x_log10() +
scale_y_log10() +
labs(title = "Distribución de Zipf por Libro",
subtitle = plot_subtitle,
caption = plot_caption,
x = "Rango (logarítmico)",
y = "Frecuencia de términos (logarítmica)",
color = "Libro")
# Guardar el gráfico
png("src/graphics/04_ley_zipf.png", width = 20, height = 8, units = "in", res = 120)
print(plot)
dev.off()
El gráfico Distribución de Zipf por Libro en Episodios Nacionales exhibe la relación entre el rango y la frecuencia de términos para cada libro de la primera serie de los Episodios Nacionales de Benito Pérez Galdós, utilizando una escala logarítmica para ambos ejes. Esta visualización permite analizar la distribución de los términos y cómo se ajustan a la ley de Zipf, destacando particularmente las desviaciones de esta ley, como las mesetas y picos, que son cruciales para entender la dinámica lingüística y narrativa de cada volumen.
Desviaciones de la Ley de Zipf: Mesetas y Picos
Presencia de Mesetas y Picos: En el gráfico, notamos varias mesetas y picos a lo largo de las líneas que representan cada libro. Las mesetas sugieren períodos donde varios términos comparten frecuencias similares, lo que podría vincularse con la introducción recurrente de temas o personajes que predominan en ciertas partes de los libros. Por otro lado, los picos podrían indicar términos que, aunque no predominan en todo el texto, adquieren una relevancia particular en contextos específicos.
Relevancia Temática y Narrativa: Las mesetas y picos reflejan la riqueza temática y la complejidad narrativa en la obra de Galdós. Los términos que aparecen con alta frecuencia en determinados capítulos o secciones pueden estar relacionados con eventos clave o personajes centrales en esos momentos de la narración.
Contexto y Variabilidad entre Libros
Diversidad en el Uso de Palabras: La forma y pendiente variadas de las líneas de cada libro demuestran diferencias en el estilo narrativo y la densidad temática de Galdós. El autor adapta su vocabulario según las exigencias narrativas de cada libro, lo que se manifiesta en cómo algunos términos varían en frecuencia en comparación con otros.
Línea geom_smooth: La línea
suavizada (geom_smooth) facilita la visualización de una
tendencia general a lo largo de todos los libros, indicando un patrón
común en el uso del lenguaje conforme a la ley de Zipf. Sin embargo, es
crucial observar las desviaciones respecto a esta línea para una mejor
comprensión de las peculiaridades de cada texto.
Conclusión
Este análisis enfatiza que las desviaciones de la ley de Zipf, observadas como mesetas y picos en la distribución de términos, son fundamentales para comprender la estructura lingüística y narrativa de los Episodios Nacionales. Estas desviaciones, que son más prominentes en las frecuencias de nombres propios, revelan cómo Galdós adapta su narrativa para incorporar eventos históricos clave y figuras relevantes. Este patrón en los nombres propios sugiere que Galdós se desvía de la distribución típica de términos para dar relevancia a personajes y lugares significativos en el contexto histórico de sus obras, lo que enriquece la trama y aporta profundidad a su recreación de la historia española.
La ley de potencia es una herramienta crucial para entender la distribución de términos en un texto. Esta ley establece que la frecuencia de uso de una palabra es inversamente proporcional a su rango en la lista de palabras ordenadas por frecuencia, es decir, las palabras más comunes aparecen mucho más a menudo que las palabras menos comunes.
La ley de Zipf es un caso particular de la ley de potencia aplicado específicamente a la frecuencia de las palabras en un lenguaje natural. Después de calcular y representar la ley de Zipf, es útil analizar la ley de potencia para proporcionar un marco más general y comparativo de cómo se distribuyen las palabras en los textos. Esto nos permite identificar desviaciones y particularidades en el uso del lenguaje dentro de los textos analizados.
En el contexto de los Episodios Nacionales de Benito Pérez Galdós, la representación de la ley de potencia nos ayuda a identificar la tendencia decreciente en la frecuencia de uso de las palabras y a observar cómo estas frecuencias se ajustan a un modelo de distribución esperado. A continuación, se presenta un análisis detallado de esta distribución utilizando una regresión lineal en una escala log-log.
zipf <- lm(log10(term_frequency) ~ log10(rank),
data = freq_by_rank_books)
summary(zipf)
##
## Call:
## lm(formula = log10(term_frequency) ~ log10(rank), data = freq_by_rank_books)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.3702 -0.2290 -0.1837 0.1320 2.3845
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.140672 0.009231 -448.58 <2e-16 ***
## log10(rank) -0.040962 0.002545 -16.09 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3641 on 107524 degrees of freedom
## Multiple R-squared: 0.002403, Adjusted R-squared: 0.002394
## F-statistic: 259 on 1 and 107524 DF, p-value: < 2.2e-16
En este gráfico, se muestra la relación entre el rango y la frecuencia de términos para cada libro de la serie, junto con una línea punteada negra que representa el ajuste de la ley de potencia. Esta visualización es esencial para comprender cómo la frecuencia de uso de las palabras se desvía de una distribución Zipf estándar y revela variaciones significativas entre los diferentes libros.
plot <- freq_by_rank_books %>%
ggplot(aes(rank,
term_frequency,
color = document)) +
geom_abline(intercept = -4.140672,
slope = -0.040962,
color = "black", linetype = 2, linewidth = 1.1) +
geom_line(linewidth = 1.1,
alpha = 0.6) +
labs(title = "Ley de potencia",
subtitle = plot_subtitle,
caption = plot_caption,
x = "Rango (logarítmico)",
y = "Frecuencia de términos (logarítmica)",
color = "Libro") +
scale_x_log10() +
scale_y_log10()
# Guardar el gráfico
png("src/graphics/05_ley_potencia.png", width = 20, height = 8, units = "in", res = 120)
print(plot)
dev.off()
Conclusión
El gráfico revela que la distribución de frecuencias de términos en los Episodios Nacionales no se ajusta perfectamente a la ley de potencia. La mayoría de las líneas de colores muestran desviaciones significativas respecto a la línea negra punteada. Estas desviaciones son indicativas de las peculiaridades en el uso del lenguaje y las diferencias estilísticas entre los distintos libros de la serie. Estas observaciones son esenciales para estudios literarios más profundos y para comprender mejor el estilo narrativo de Galdós, reflejando la prominencia de ciertos términos y la estructura narrativa particular de cada obra.
Para analizar los temas principales de la primera serie de los Episodios Nacionales, se empezaron utilizando técnicas tradicionales de modelado temático como LDA (Latent Dirichlet Allocation) y LSA (Latent Semantic Analysis). Sin embargo, la predominancia de nombres propios en los textos, debido a su naturaleza novelística, limitó la efectividad de estos métodos. Por ello, se optó por utilizar BERTopic, un enfoque avanzado basado en BERT (Bidirectional Encoder Representations from Transformers).
BERTopic es una técnica de modelado temático que combina BERT para generar embeddings de alta calidad con clustering y reducción de dimensionalidad. En su arquitectura, BERTopic utiliza TF-IDF para crear representaciones más relevantes y contextuales de los términos. Esto permite identificar con mayor precisión los temas presentes en el texto, al tener en cuenta tanto la frecuencia de las palabras como su importancia relativa en el corpus.
La ventaja de aplicar BERTopic en este trabajo radica en su capacidad para captar matices semánticos y contextuales, superando las limitaciones de las técnicas tradicionales. Al incorporar TF-IDF, BERTopic mejora la diferenciación entre términos comunes y específicos, lo que es especialmente útil en textos literarios donde los nombres propios y las descripciones detalladas son abundantes.
Este enfoque fue implementado en el notebook de Python
02_Topicos_Models_Episodios_Nacionales.ipynb, facilitando
una mejor captura y comprensión de los temas subyacentes en las novelas,
aprovechando las capacidades de BERT para manejar la complejidad
lingüística de los textos literarios.
Primero, exportamos el dataframe para importarlo en el notebook Python.
# Guardar el dataframe en un archivo CSV
write.csv(books_metadata_filtered, file = "src/csv/books_metadata_filtered.csv", row.names = FALSE)
A continuación, cargaremos los datos recopilados en dicho notebook.
# Cargar los datos desde el archivo CSV
topic_info <- read.csv('src/csv/topic_models.csv')
# Mostrar los registros
topic_info
En esta sección se representarán las palabras que presentan mayo frecuencia según BERTopic, separando los tópicos por colores.
# Definir la paleta de colores
palette <- brewer.pal(50, "Set3")
# Crear un vector de colores basado en topic_index
colors <- palette[topic_info$topic_index %% length(palette) + 1]
# Nombre del archivo
filename <- "src/graphics/06_wordcloud_topic_models.png"
# Configuración para guardar el gráfico
png(filename,
width=3000,
height=3000,
bg = "black"
)
# Generar el wordcloud
wordcloud(words = topic_info$word,
freq = topic_info$weight,
min.freq = 1,
scale = c(12, 2), # Ajustar la escala para aumentar el tamaño de las palabras más importantes
colors = colors,
random.order = FALSE,
rot.per = 0.1,
max.words = 200)
# Cerrar el dispositivo de gráficos
dev.off()
Observamos una heterogeneidad de los tópicos entre las palabras de mayor frecuencia (aquellas de mayor tamaño). En el centro del mismo, donde se encuentran las palabras de mayor peso, se visualizan nombres de personajes principales, tales como Gabriel, Amaranta o Santorcaz, y términos relevantes, como «guerra» y «heridos», debido al carácter bélico de las novelas, o «corazón» y «madre» por la trama en la que se ven envueltos los personajes de la obra.
En este apartado se mostrará una nube de palabras para cada tópico, donde el tamaño de cada palabra será proporcional a su peso.
# Seleccionar los 9 tópicos principales basados en el peso (weight)
top_topics <- topic_info %>%
arrange(desc(weight)) %>%
distinct(topic_index, .keep_all = TRUE) %>%
head(9) %>%
pull(topic_index)
top_topics
## [1] 34 20 36 22 37 35 48 45 43
# Filtrar los datos para los tópicos principales
filtered_data <- topic_info %>%
filter(topic_index %in% top_topics)
filtered_data
# Crear el layout y guardar la imagen en un archivo
filename <- "src/graphics/07_topic_models_wordclouds.png"
png(filename = filename,
width = 3000,
height = 3000,
res = 300)
# Configurar el layout de la gráfica dentro del bloque de guardado
n_topics <- length(top_topics)
n_cols <- ceiling(sqrt(n_topics))
n_rows <- ceiling(n_topics / n_cols)
par(mfrow = c(n_rows, n_cols),
mar = c(0, 0, 2, 0),
bg = "black")
# Crear nubes de palabras para cada tema
for (topic in top_topics) {
topic_words <- subset(filtered_data, topic_index == topic)
colors <- palette[topic %% length(palette) + 1]
wordcloud(words = topic_words$word,
freq = topic_words$weight,
scale = c(10, 5),
colors = colors,
random.order = FALSE,
rot.per = 0.1,
max.words = 100)
title(main = paste("Tópico", topic), col.main = "white", cex.main = 2)
}
dev.off()
## png
## 2
A partir de estos tópicos, que representan los más frecuentes y destacados en la primera serie de los Episodios Nacionales de Benito Pérez Galdós, podemos interpretar y contextualizar algunos de ellos de manera más detallada.
Tópico 37 - Brutalidades de la Guerra
Tópico 34 - Santorcaz y sus Características Personales
Tópico 30 - Amaranta y sus Relaciones Sociales
Tópico 36 - Gabriel y su Papel
Tópico 35 - Emociones Profundas e Inés
Tópico 48 - Impacto de la Guerra en la Salud y el Bienestar
Conclusión
Estos tópicos, siendo los más frecuentes en los textos, proporcionan una visión amplia y diversa de la narrativa de Galdós. Los Episodios Nacionales de Galdós no solo capturan eventos históricos sino también proporcionan una introspección profunda en la psicología y moralidad de los personajes, explorando dilemas y desafíos contemporáneos. La representación de figuras históricas clave, junto con la exploración de temas universales como la devoción, el honor, y las relaciones interpersonales, permite a Galdós comentar sobre la condición humana mientras pinta meticulosamente la historia y la sociedad españolas.
El análisis de sentimiento es una técnica poderosa utilizada para comprender las emociones y actitudes expresadas en un texto. Esta técnica asigna una puntuación numérica a las palabras o frases, indicando si el sentimiento expresado es positivo, negativo o neutral. En este apartado, se aplicará el análisis de sentimiento a los textos de la serie Episodios Nacionales de Benito Pérez Galdós.
Utilizando la biblioteca syuzhet, se evaluarán los
sentimientos a lo largo de los capítulos de cada libro.
syuzhet analiza el texto y asigna una puntuación de
sentimiento basada en un rango numérico donde las palabras positivas
tienen una puntuación alta y las palabras negativas tienen una
puntuación baja. La puntuación de sentimiento para cada capítulo se
calculará restando el número de palabras con connotación negativa del
número de palabras con connotación positiva, generando así un valor neto
que refleja el tono emocional de ese capítulo.
Este enfoque permitirá identificar patrones emocionales y detectar momentos clave en la narrativa donde se intensifican las emociones positivas o negativas.
A continuación, se presentan los pasos para realizar este análisis, seguido de una visualización que muestra cómo los sentimientos evolucionan a lo largo de los capítulos en cada libro.
# Función para realizar el análisis de sentimiento en cada texto
get_sentiment_scores <- function(text) {
# Obtener los sentimientos utilizando la biblioteca syuzhet
sentiments <- get_nrc_sentiment(text, language = "spanish")
# Calcular el sentimiento positivo y negativo
sentiment_score <- sum(sentiments$positive) - sum(sentiments$negative)
return(sentiment_score)
}
# Aplicar el análisis de sentimiento a cada capítulo
books_metadata_sentiment <- books_metadata_filtered %>%
group_by(book, chapter) %>%
summarise(text = paste(text, collapse = " ")) %>%
mutate(sentiment = sapply(text, get_sentiment_scores))
## `summarise()` has grouped output by 'book'. You can override using the
## `.groups` argument.
# Ver las primeras filas con el análisis de sentimiento
head(books_metadata_sentiment)
Representamos gráficamente los resultados obtenidos del análisis de sentimientos por cada capítulo de cada libro.
# Crear un gráfico de barras apiladas para visualizar el sentimiento a lo largo de los capítulos de cada libro
plot <- ggplot(books_metadata_sentiment,
aes(x = as.factor(chapter),
y = sentiment,
fill = book)) +
geom_col(position = "identity", alpha = 0.7) +
geom_hline(yintercept = 0, linetype = "solid", color = "black") + # Añadir la línea en y = 0
scale_y_continuous(limits = c(-75, 75)) +
labs(title = "Análisis de Sentimiento a lo largo de los capítulos por cada libro",
subtitle = plot_subtitle,
caption = plot_caption,
x = "Capítulo",
y = "Puntuación de Sentimiento",
fill = "Libro")
# Guardar el gráfico
ggsave("src/graphics/08_analisis_sentimiento.png", plot, width = 17, height = 8, units = "in", dpi = 120)
# Crear el gráfico animado
plot <- ggplot(books_metadata_sentiment,
aes(x = as.factor(chapter),
y = sentiment,
fill = book)) +
geom_col(position = "identity") +
geom_hline(yintercept = 0, linetype = "solid", color = "black") + # Añadir la línea en y = 0
scale_y_continuous(limits = c(-75, 75)) +
labs(title = "Análisis de Sentimiento a lo largo de los capítulos de {closest_state}",
caption = plot_caption,
subtitle = plot_subtitle,
x = "Capítulo",
y = "Puntuación de Sentimiento",
fill = "Libro") +
transition_states(book,
transition_length = 2,
state_length = 6) +
enter_fade() +
exit_shrink() +
ease_aes('sine-in-out')
# Crear la animación
animation <- animate(plot, width = 17, height = 8, units = "in", res = 120)
anim_save("src/graphics/09_analisis_sentimiento_libro.gif", animation)
Trafalgar
La corte de Carlos IV
El 19 de marzo y el 2 de mayo
Bailén
Napoleón en Chamartín
Zaragoza
Gerona
Cádiz
Juan Martín el Empecinado
La batalla de los Arapiles
Conclusión
En resumen, el análisis de sentimiento a lo largo de los capítulos de cada libro de los Episodios Nacionales de Benito Pérez Galdós revela patrones que están estrechamente vinculados a los eventos históricos y contextos narrativos de cada obra. La presencia de sentimientos positivos y negativos refleja la complejidad emocional y los desafíos enfrentados por los personajes, proporcionando una visión profunda de las dinámicas narrativas y temáticas de la serie.
El análisis de minería de texto realizado sobre la primera serie de los Episodios Nacionales de Benito Pérez Galdós ha proporcionado una visión detallada de las temáticas, personajes y estilos narrativos empleados por el autor. A través del uso de técnicas como el wordcloud y el análisis de frecuencia de términos, hemos podido extraer conclusiones significativas sobre la estructura y los elementos clave que definen esta serie de novelas históricas.
Principales hallazgos
Dominio de Personajes y Diálogos: La prominencia de nombres propios en el wordcloud y la frecuencia de términos relacionados con el diálogo resaltan el enfoque narrativo de Galdós en el desarrollo de personajes complejos y en la utilización de conversaciones como motor principal de la trama.
Elementos Sociales y Políticos: El análisis ha subrayado el fuerte componente social y político en las novelas, evidenciado por la frecuente aparición de títulos y nombres que reflejan la estructura de clases y la dinámica de poder de la época. Esto no solo enriquece la narrativa, sino que también ofrece una crítica de las tensiones sociales y políticas de la España del siglo XIX.
Contexto Histórico y Militar: El uso destacado de términos militares y la referencia a eventos históricos específicos subrayan el compromiso de Galdós con la precisión histórica y su deseo de sumergir al lector en el contexto de las guerras que modelaron el destino de España.
Riqueza Temática y Narrativa: El análisis ha revelado una rica diversidad temática, desde la guerra hasta las relaciones personales y la moralidad, lo que demuestra la habilidad de Galdós para tejer múltiples hilos narrativos en un tapiz complejo que no solo entretiene, sino que también educa y provoca reflexión.
Este análisis resalta cómo la minería de texto mejora el entendimiento de obras literarias al identificar técnicas y temas clave, mostrando su aplicación potencial en otros textos complejos. Para futuras investigaciones, incorporar técnicas avanzadas de procesamiento de lenguaje y aprendizaje automático podría mejorar aún más la interpretación y el análisis temático. En definitiva, la minería de texto ha permitido una exploración detallada de la narrativa de Galdós, revelando su profunda y educativa representación de la historia española.
El análisis de la primera serie de los Episodios Nacionales de Benito Pérez Galdós, utilizando técnicas de minería de texto y análisis de redes sociales, ha revelado la riqueza y complejidad de estas obras. A través de un examen detallado de los elementos textuales y las conexiones entre personajes, se ha logrado una comprensión más profunda de las estrategias narrativas, temáticas y críticas sociales exploradas por el autor.
A través del análisis de minería de texto, hemos identificado la prominencia de diálogos y nombres propios, lo que resalta el enfoque narrativo del autor en el desarrollo de personajes complejos y en la utilización de conversaciones como principal motor de la trama. Este método también ha subrayado el fuerte componente social y político presente en las novelas, evidenciando la frecuente aparición de términos relacionados con la estructura de clases y la dinámica de poder de la época. Además, la detección de términos militares y referencias a eventos históricos específicos enfatiza el compromiso de Galdós con la precisión histórica, sumergiendo al lector en el contexto de las guerras que modelaron el destino de España.
Por otro lado, el SNA ha proporcionado una visión detallada de cómo figuras clave como Gabriel de Araceli e Inés actúan como nodos centrales, facilitando conexiones entre diversos grupos y eventos y afectando significativamente el flujo de la narrativa. Este análisis también ha destacado la importancia de personajes como Diego, que interactúan extensamente con otros, y la influencia cultural y social de las referencias religiosas reflejadas en los diálogos a través de la mención recurrente de «Dios».
Sin embargo, el segundo análisis ha enfrentado desafíos técnicos y metodológicos, incluyendo la precisión en la identificación de personajes y la inclusión errónea de elementos textuales irrelevantes como nodos en la red. Estos desafíos resaltan la necesidad de métodos más sofisticados y adaptados, como algoritmos de aprendizaje profundo y modelos avanzados de reconocimiento de entidades nombradas (NER), que podrían mejorar significativamente la distinción entre nombres propios y otros elementos textuales.
En conclusión, la combinación de minería de texto y SNA ha mejorado nuestra comprensión de los Episodios Nacionales, mostrando cómo la interacción entre personajes y la estructura social descrita por Galdós reflejan las dinámicas sociales y políticas de su tiempo. Las futuras investigaciones podrían beneficiarse significativamente de la incorporación de técnicas avanzadas de procesamiento de lenguaje natural y de una colaboración interdisciplinaria entre expertos en literatura, lingüistas computacionales y científicos de datos para explorar más a fondo las complejas texturas sociales y narrativas de la obra.
Herramientas
Silge, J., & Robinson, D. (2017). Text Mining with R: A Tidy Approach. O’Reilly Media. https://www.tidytextmining.com/. Consultado por última vez en 2024-05-12.
Programming Historian. (2021, marzo 23). Análisis de sentimientos en R. https://programminghistorian.org/es/lecciones/analisis-de-sentimientos-r. Consultado por última vez en 2024-05-17.
Gephi. (s.f.). Quick Start. https://gephi.org/users/quick-start/. Consultado por última vez en 2024-05-17.
Recursos de formato
R Graph Gallery. (s.f.). The R Graph Gallery. https://r-graph-gallery.com/index.html. Consultado por última vez en 2024-05-17.
Thomas Lin Pedersen. (s.f.). gganimate: A Grammar of Animated Graphics. https://github.com/thomasp85/gganimate. Consultado por última vez en 2024-05-17.